package Q16_18_Pattern_Matcher; public class QuestionA { public static boolean doesMatch(String pattern, String value) { if (pattern.length() == 0) return value.length() == 0; int size = value.length(); for (int mainSize = 0; mainSize < size; mainSize++) { String main = value.substring(0, mainSize); for (int altStart = mainSize; altStart <= size; altStart++) { for (int altEnd = altStart; altEnd <= size; altEnd++) { String alt = value.substring(altStart, altEnd); String cand = buildFromPattern(pattern, main, alt); if (cand.equals(value)) { System.out.println(main + ", " + alt); return true; } } } } return false; } public static String buildFromPattern(String pattern, String main, String alt) { StringBuffer sb = new StringBuffer(); char first = pattern.charAt(0); for (char c : pattern.toCharArray()) { if (c == first) { sb.append(main); } else { sb.append(alt); } } return sb.toString(); } public static void main(String[] args) { String[][] tests = {{"ababb", "backbatbackbatbat"}, {"abab", "backsbatbackbats"}, {"aba", "backsbatbacksbat"}}; for (String[] test : tests) { String pattern = test[0]; String value = test[1]; System.out.println(pattern + ", " + value + ": " + doesMatch(pattern, value)); } } }